package dao;

import entity.ItemCart;
import entity.User;
import util.ItemCartUtil;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ItemCartDao extends BaseDao {
    public ItemCartDao() {
        super();
    }

    /**
     * 保存购物车信息
     */
    public void save(ItemCart itemCart) {
        String sql = "INSERT INTO t_item_cart(user_id, item_id, num, status, created, updated) VALUES(?, ?, ?, ?, NOW(), NOW())";
        // 拿到刚刚插入的数据的cart_id
        int cart_id = this.updateData(sql, itemCart.getUserId(), itemCart.getItemId(), itemCart.getNum(), itemCart.getStatus());
        itemCart.setId(cart_id);
    }

    /**
     * 通过用户id查找该用户的购物车信息
     */
    public List<ItemCart> findByUserId(int userId) {
        List<ItemCart> list = new ArrayList<>();
        String sql = "SELECT * FROM t_item_cart WHERE user_id = ? AND status = 1";
        try (ResultSet rs = this.queryData(sql, userId)) {
            if (rs == null) return null;
            list = new ArrayList<>();
            while (rs.next()) {
                list.add(ItemCartUtil.rsToItemCart(rs));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    public List<ItemCart> findByUserId(User user) {
        return this.findByUserId(user.getId());
    }

    /**
     * 通过购物车id更新某条商品的数量
     */
    public void updateNum(ItemCart itemCart) {
        String sql = "UPDATE t_item_cart SET num = ?, updated = NOW() WHERE id = ?";
        this.updateData(sql, itemCart.getNum(), itemCart.getId());
    }

    /**
     * 通过购物车id删除一条购物车信息（这个是真的删除）
     */
    public void delete(ItemCart itemCart) {
        String sql = "DELETE FROM t_item_cart WHERE id = ?";
        this.updateData(sql, itemCart.getId());
    }

    /**
     * 通过购物车id更新购物车状态（购物车状态，1-正常，0-删除）
     */
    public void updateStatus(ItemCart itemCart) {
        String sql = "UPDATE t_item_cart SET status = ?, updated = NOW() WHERE id = ?";
        this.updateData(sql, itemCart.getStatus(), itemCart.getId());
    }

    /**
     * 通过购物车id批量更新购物车状态（购物车状态，1-正常，0-删除）
     * 有待改进，可通过事务和批处理提高效率并保证数据一致性
     */
    public void updateStatus(List<ItemCart> itemCarts) {
        for (ItemCart itemCart : itemCarts) {
            this.updateStatus(itemCart);
        }
    }

    /**
     * 通过物品id和用户id查找购物车信息
     */
    public ItemCart findByItemIdAndUserId(int itemId, int userId) {
        String sql = "SELECT * FROM t_item_cart WHERE item_id = ? AND user_id = ? AND status = 1";
        try (ResultSet rs = this.queryData(sql, itemId, userId)) {
            if (rs == null) return null;
            if (rs.next()) {
                return ItemCartUtil.rsToItemCart(rs);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 通过物品id和用户id判断购物车中是否存在该物品
     */
    public boolean isExist(int itemId, int userId) {
        return this.findByItemIdAndUserId(itemId, userId) != null;
    }
}
